package com.zp.self.module.level_4_算法练习.数据结构.链表;

/**
 * @author By ZengPeng
 */
public class 力扣_82_删除排序链表中的重复元素II {
    //测试
    public static void main(String[] args) {
        ListNode node = ListNode.getNode();
        System.out.println(new 力扣_82_删除排序链表中的重复元素II().deleteDuplicates(node));
    }

    /**
    题目：给定一个已排序的链表的头 head ，删除原始链表中所有重复数字的节点，只留下不同的数字 。返回 已排序的链表 。

     示例 1：
     输入：head = [1,2,3,3,4,4,5]
     输出：[1,2,5]

     示例 2：
     输入：head = [1,1,1,2,3]
     输出：[2,3]

    分析：【perfect】
       1.记录正在删除的数，判断当前值是否要被删除
            不被删除的情况下，看看自己与自己的下一个是否相等？:从而更新正在删除的数，且砍断联系

    边界值 & 注意点：
       1. [1,2,2]  //未斩断 1->2 的关联
     **/
    public ListNode deleteDuplicates(ListNode head) {
        ListNode res =new ListNode(),pro=res;
        int delete =Integer.MAX_VALUE;
        while (head!=null){
            if(delete!=head.val){
                if(head.next==null || head.val!=head.next.val ){
                    pro.next=head;
                    pro = pro.next;
                }else {
                    delete=head.val;
                    pro.next=null;
                }
            }
            head=head.next;
        }
        return res.next;
    }
}
